Rereading Eberhard's post, I not sure if it is proposed to return status of the send method as well as endTranmission.
Yes, we need a return value for both calls!
The situation with the send()-method is a bit confusing, since it works a bit differently for Master and Slave mode.
When you act as a IIC-Master the send() method simply stores the bytes from the argument in an internal buffer of fixed size. The return-value from this method should return 0 if the data was sucessfully stored (enough room in the buffer). When your code wants to store too many bytes the method returns 1 and does not save any of the data (which can be an array of char for instance) in the buffer.
The confusing part is that even though the method is called send() no data is going down the wire if you are in IIC-Master mode. The actual transfer of the data happens in endTransmission(). The is why the return value of endTransmission() tells you wether you supplied a bad address from the slave-device, or if there had been any errors in the transmission.
Her the situation is different. You don't have the calls to beginTransmission() or endTransmission() the library itself will take care that the data gets delivered to the Master requesting it. All you have to do is fill up the buffer. But since the slave-device buffers capacity is limited too, we have the same return values (0->success; 1->Not enough room in the buffer)
If the intent is just to have the return status on endTransmission then IMO this method should not actually send anything placed in the local buffer if the buffer was overflowed by a previous call to send.
With the two return values you can't overflow the buffer by accident. So its safe to split you data into two or more parts and send them off individually.
Part of my problem with Wiring is the confusing function naming and documentation, the functions simply don't do what they say they do.
Yes. The Wire lib needs a new documentation page on the Arduino-(Playground)-Site.
IMO it would be good to rename the Arduino library functions to something more evocative of their function, for example:
Wire.clear rather than Wire.beginTransmission
Wire.write rather than Wire.send
Wire.transmit rather than Wire.endTransmission
Macros could be used so the old names would still compile in legacy code.
With the return-values you have everything you need for error-handling without breaking any of the old code that is floating around in tutorials and examples. I rather keep the old names and work on the documentation instead.