I worked with your son, only she was the 4 year old I was a Nanny for = )
Here is what I did:
First, I realized how great it was for her to be smart and observant at such a young age. I tried to view it as a bonus to enhance, (even when it bugged me to death).
Next, I realized the word "no" or other negative wording did not work for her, so I used Yes Statements, "Yes you can go outside, as soon as...."
I also believe in listening and encouraging respectful negoiations. I don't always see everything that happened, so if she came to me stating a punishment was unfair, I listened. However, she had to present her argument in a respectful way & honor my final decision. This helped a lot.
Kids who are smart and independent do not respond to normal techniques. Instead of treating him like a child, as most adults do, treat him like a person, talk to him, explain WHY you need X, Y, Z to happen. While he is not your equal, he is begging for respect, but in rude ways.
Tell him you're starting a new rule, you will listen to him, but he has to be respectful and show/tell him what you belive respectful is. When he is being rude, tell him, "try again, I felt that was rude".
You'll be teaching him great skills while eliminating the fighting. When kids feel respected and listened to, they will obey!