Most of the clients I've gotten from oDesk have been great. I'd be willing to actually say all but one of them. This one client is just going down the checklist of bad behavior:
I'm really at a loss here. I like to think I do good work (who doesn't?), and my clients thusfar have seemed to agree, but this contract is looking like it's going to come to a messy conclusion and leave a stain on my perfect rating. What can I possibly do about this?
I'm sorry to hear that you are dealing with whose personality doesn't mesh well with yours.
The most basic answer to your question ("how should I deal with a bad client?") is to stop dealing with him. This is a client whose unique personality is best served by somebody who is NOT you.
I'm not sure why you are so worried about him leaving a stain on your perfect rating. That ship has already sailed.
The fewer hours you work for this client, the less damage his negative rating will do to your rating once you close the contract. But if the contract is NOT closed, there will be no feedback rating submitted. So ultimately you may need to choose between:
a) keeping him as a long-term client, just to do small amounts of maintenance work
b) arranging to close the contract as gracefully as possible, and take the hit now rather than later when it's worse
How you handle this also depends heavily on whether you have a fixed-price or hourly contract.
If you have a fixed-price contract, you can simply explain that everything he is doing and asking for which you don't like is OUTSIDE THE SCOPE of the written contract set up at the beginning of the contract or milestone. Because these things (such as processing bug reports or providing code before paying) are OUTSIDE THE SCOPE of the fixed-price contract, it is a violation of oDesk policy for you to do them. Fixed-price contracts are for agreed-upon deliverables. They are not for anything the client feels like doing. If he sends you an insulting email, you don't have to respond to it. Responding to email is OUTSIDE THE SCOPE of your fixed-price contract.
If you have an hourly contract, then you can explain that your schedule has changed and you only have two hours per week to work on his project, and that if that's okay with him, you are happy to continue, but that he may be better served by somebody who has more time to dedicate to the project.
What I would NOT do is to send the client a litany or list of grievances. You may send one at a time, however. If he asks for something inappropriate, just tell him that you can't actually do that. (Either due to oDesk policy or your own policy.)
But try to keep an open mind. Your client may simply not be experienced enough in this type of work to realize that he is making mistakes.
And remember: Everything you said about your client here? He's saying the same things about you.
You're probably right on all accounts, Preston. Regardless of who's at fault, in general, everyone says "not me, it must be you". So while my issues seem legitimate to me, they would seem like utter nonsense to the client, or unproven to anyone else.
I suppose the moral of the story is to just do what I can to end this quickly, continue to be polite as possible in the meantime, and never look back once it's done.