You know, sometimes the good kid does have to suffer because of the bad kid. That might mean that you leave your fun thing, and return another time with just the good kid. They will put significant pressure on each other to knock off the bad behavior so that they don't both miss out.
As for Johnny throwing rocks at cars, he gets to sell his T.V. to pay for any damage he caused, and he can live without it until his parents deem that he has earned it back. He then gets work the next 4 saturdays washing cars for the local mission, or picking up litter around parks and neighborhoods, or some other act of community service. And he misses out on extra cirriculars and parties and whatever else important to him, because vandalism is a serious act and people have died from kids throwing rocks at cars.
When my daughter hit me when she wa a toddler, I looked her in the eye, told her I wasn't going to spend time being hit, and got up and walked away and made her have solo time for a few minutes. She learned quickly that if she wanted to be around people, she couldn't hit.
I'm not a perfect parent. I've raised my voice more than I prefer, and I sometimes am quick to react without thinking about the situation. My intention for punishment is always to teach my child, not to hurt them with words or physical contact.