Wire.available() and Serial.available() : How do they differ?

If the function (Wire.requestFrom()) executes with success, the Wire.available() function will return 7. Now, the user is ensured that the master has received 7-byte data from the slave, and he may proceed to read them from the buffer. Wire.requestFrom() is inherently a loop instruction, and it might fail (for some reasons) after the transfer of only 5-byte data instead of 7-byte. In this case, the user will be able to get 5-byte data.

I don't think this is correct. Wire.requestFrom() either returns zero (if the slave could not be connected to) or the number of bytes requested, regardless of how many bytes the slave actually sent.