I've tried my solution and I'm back to thinking that Serial.available() is not working right.
Yes, it is.
1) It does appear that it waits for the carriage return before reporting the available charters. i.e. type something into the serial monitor and don't press the carriage return and it will never report any characters available.
Because the serial monitor doesn't send anything until you hit the send button.
2) When polling Serial.available() it always returns 1 character and the the rest
Serial.available() returns the number of bytes in the serial buffer. Your code is looping, checking on how many characters are available. As soon as one is, it begins reading them.
3) Serial.read() never returns a carriage return or line feed. It seems to be stripping them out.
No. The serial monitor doesn't send them, unless you have chosen that option (only available in 0022 and later).