I hope he is being disciplined when he does this, so that he learns there are consequences for his bad behavior. Get down to his level and calmly but sternly tell him."we do not hit other people" and put him in time-out for 2 minutes. Then when his time-out is up, tell him this again, and give him a big hug and tell him you love him.
My son clunks me on the head when I am sleeping, because he wants my attention. So to the above list, I'd add, is he getting the attention he wants, or is he getting attention only when he acts out?
That is not normal behavior. I have a couple questions for you..
1. Have you brought this up to the doctor?
2. What do you do when he does this?
3. Is there a lot of yelling in your house?
4. Have you talked to him about his behavior?