Question: So, I was tasked by client to help him convert his wp menu to javascript dropdown. I did on my development server. He did see the change and I was paid. I deliver the code he deploy it. But, no change on his server. So, I have to spent hours debugging it on his server. It turns out, his other plugin is not compatible with my change. That plugin is really custom. I have to change my code to make sure it's compatible with that plugin.

My question is, **is it fair for me to charge him for the hours I spent on debugging it AND actually fixing it?** or **is it still my responsibility, to make sure my code deployed properly?**

Answer: 
There is a third option here where you could charge him for the fix (ie, finishing the job), but not charge him for the debug time which only occurred because you did not do your *BEST* possible job as a programmer.

Don't get me wrong; **you did what most developers would do** with a contract job. However, as developers we also know that minor differences between servers can be the difference between working plugin and a worthless plugin. Had you of created a mirror of the clients setup (as close as reasonably possible), this likely could have been avoided.

I would *ask* him for payment (keyword *'ask'*; do not REQUIRE payment) regarding the fix, but leave the debug time out of it. Make a point of bringing this to his attention; perhaps include the debug time on the invoice with a deduction.
On one hand, I think you're within your rights. If he didn't give you all the information you needed to do the job successfully (ie. the other plugin), how could you be expected to?

On the other hand, is there likely to be more work from this source, or through his friends? If so then you might want to seriously consider whether within your rights is enough. Maybe doing him a favour will more than pay off in the end.