Your son sounds normal. Give him control over things that don't matter. You offer 2 cookies, he asks for 5, you compromise on 3. He'll still want to bargain. Offer him 3 and say it's 3 or none at all and start to put them back. He'll grab the 3.
Let him choose which clothes to wear by offering him 2 choices. This is an example of how you can give him control in many ways. By giving him control where ever you can you are meeting his natural need to have control. After all you want him to learn how to control his life. This is the beginning of teaching that task.
Don't use time outs. They don't work for some kids. They didn't for my grandchildren, now 6 and 9. When they wouldn't co-operate they were told, in a calm and matter of fact voice to go to their room until they could comply. At first they had difficulty going or staying. We just stood, looking at them and repeated the statement. Depending on the situation, sometimes in a good humored way and sometimes more stern. No arguing. No physical contact. It does take time for them to realize that you mean business. After a couple of weeks my grandchildren went to their room after the first request. My grandson was 4 and my granddaughter 6.
Any time you have a battle of wills you have lost. The child will always find a way to get the upper hand. So stop making it a battle of wills. No arguing, no shouting, just calm, straight forward comments with you staying right there until they either do what you've said or go to their room.
Again, this is a choice for them. They can choose to do what you said. They cannot chose to not do either one of them. This is a subtle difference but one that kids will pick up on if you tell them that you're giving them a choice.
Once they come out of their room repeat what you wanted them to do, tell them that is why they went to their room and require them to apologize and do what you said. My daughter adds one more chore to the first one. I don't. If they don't apologize or don't complete what you asked they go back to their room;
Because you are calm and show an I am in charge demeanor by being direct and not allowing any negotiating they will learn to follow your directions. Never argue. A good way to respond is "never the less, you must do what I said." If they don't, say "go to your room until you're willing to do it." Or you can say," I heard you but you still must do as I say." Sometimes the arguing goes on because they think you didn't hear or because you do respond to what they say instead of sticking with what you want them to do.
My daughter does use taking away toys and privileges for some things but I don't think that works well for a 4 year old. They have many toys and are not usually attached to anything in particular. Besides you don't want to take away lovies or the things that are important to them for soothing. When they're older they "need" certain toys for their favorite activities. And they are much more attached to TV viewing and computer use.
One of my therapists told me that any time I had to pick up a child kicking and screaming for discipline purposes I was defeating the purpose of the discipline. The child becomes angry at being picked up and loses focus on why you're putting him in time out to begin with. I did find that I could not put my step-son ( he was too big) or my grandchildren in time out. All they had to do was refuse and the fight was on. But when you tell them to go to their room and continue to stand and look at them they have to do something. They can't kick and squirm. Somehow this works much better perhaps because they do have a choice, both of which are acceptable to you.
Don't be concerned about what they do in their room. They may begin to play but eventually they are going to want to come out. And if they're being obstinate because they're tired they may end up asleep. That's a good thing.
It is right to pick up a child when safety is an issue but otherwise we want to teach them how to obey and to be in control of themselves.
I believe that spanking teaches that it's OK to hurt someone when they don't do what we want. Often kids do not think that the parent has made a reasonable request which results in them thinking that no matter what it's OK to hit. There are times when a swat is appropriate but that's a different issue.
Rewards are not always the best way to teach either. It depends on how you use them. One way that does frequently work is to have a chart on which he gets to place a sticker every time he does pick up his toys without a fuss. Have a short list of things to do that will allow him to earn something. After so many stickers he earns a small toy, an ice cream cone, etc. You are then giving him a choice. Pick up your toys and get a sticker or don't pick up your toys and don't get a sticker. You're teaching him how to earn things that he wants. You have a tool to teach choices.
I suspect that his teachers or other adults do not get defiance because they set up their exchange with him in a manner that does not invite defiance. They give him choices when ever possible. They don't argue with him. They maintain a friendly but yet serious stance of this is the way it is. They do not feel that they have to convince him to obey. They just expect it and have an easily enforced consequence if he doesn't. The whole atmosphere is different than the one that has developed at your house. They probably use a lot of humor, too.
I suggest that you visit the classroom and watch how the adults deal with the children. Perhaps ask a teacher for recommendations about ways to deal with your son.
You will have more difficulty being consistent and getting compliance than the teacher or other adult because you're his mom and he's used to the way you've been doing it up until now. He will test you big time until he knows that you will do the same thing over and over. The most important thing for you to do is to be consistently matter of fact and follow thru without engaging in an argument. Keep your cool. Plan for extra time with him until he learns that has to comply. Acknowledge that he is having difficulty with this new way of doing things. Show him sympathy. Say, "I know this is hard for you."
Give yourself sympathy when he's not around. It is hard for you too. It will take time and a concerted effort on your part to make this work. You'll quickly get angry and shout until you're able to let go of the idea that this is a battle of wills. You'll get discouraged. Find people with whom you can vent your frustrations but do not show your son that you are frustrated. Maintain a calm, this is the way it is attitude. Use humor when you're with him and when you're not every chance you get.
Giving him choices whenever possible will help bring him around. He does need to feel that he has some control in his life.