Disclaimer: I’m user of Skype, Google Talk and Windows Live Messenger. If there are other IM clients which implement this as it should be, feel free to comment.
Most people don’t know how to use their IM clients. I’m serious, they are totally clueless about things like “status message” or “display name”. Maybe it’s because we, developers, didn’t do the right thing. But that’s not the worse part… What really grinds my gears is people who aren’t away but the set their status that way. There is something intrinsically wrong in letting people setting their status as “away”.
How many times someone has talked to you when you weren’t in front of your computer and when you’re back, you see they are “away”? I don’t know about you, but that makes me not to answer. And what’s worse: people who appears as disconnected… Choice is bad: people choose status by their likeness of the color.
Solution: the Google Talk way. You’re either Available or Busy. Only if you are away, it sets itself in “away”. Gmail Talk Client allows you to be Invisible, that’s ok if you just want to read your email.

As bad as it might sound, I believe it is important to let the person choose the status not only globally (gTalk – with galwaysidle / MSN ) but also by groups or by individuals (yahoo IM). But I am sure this is bit religious, however, consider this situation, I am at work, and not ready to answer some tech questions by acquaintances in my contact list, but I want to be available to my close friends.
Secondly, in Mac, iChat lets you set the status AWAY for Google chat, so does galwaysidle plugin with gTalk in Windows.
Finally, I don’t understand the point in setting the state to invisible when reading mails; why not sign out form the chat?