A PROPER fix
…would be:
[If recipient is an active* iMessage user]
1) Sender's iPhone sends the message to Apple
2) Apple always dispatches the messages to the PHONE over SMS, but would still use TCP/IP to push messages to non-phone clients like OS X, iPad, etc.
AFAIK, it is trivial for Apple to spoof an SMS to a phone and make it look like it originated from the sender's phone. The receiving phone could still color the bubble blue based on the sender being an "active iMessage user".
*within some timeout period.