They have to have the physically and mental capacity to continually brush all of their teeth for about 3 minutes (a number I've been told is good by many dentists).
If he's not able to get all the teeth, front and back, then what we have done with our kids is to set a timer for 1-2 minutes and let them brush, then have a parent brush for 1-2 minutes. One way to avoid conflict is to give them a choice: "Do you want to brush first, or do you want daddy to brush first?" Also, teach them to set the timer, because kids love timers for some reason.
Once they're old enough to brush on their own, I would still monitor them for the entire three minutes and make sure they're still setting the timer. At this time, you should brush your teeth along with them, so they see that its not just a chore for children, but something that all people have to learn and do.