1) Implemented a few months ago, if Wil throws a toy at someone or hits someone with a toy, the toy goes in a clear plastic jar called the "Holding Tank" and he doesn't get it back until the following day. He can see the toy. The first few times he asked to have them back. Now, he occasionally comments on them, but doesn't ask for them back. He also doesn't throw his toys very often. And when he gets in the mood to do it, he will offer up additional toys as I collect the offending ones, as if to say, "I was going to throw these, so you might as well take them now." It's cute. He'll tell me his toys are having a time out.
2) Implemented last week and still in the learning stage, his toys get a time out for a day if they aren't picked up at night. We are still doing most of the picking up, but he's getting better at helping. I'm hoping another few weeks will have him doing more on his own. There's hope. The other night, he wanted to go up to bed, then remembered his toys were still out. So he asked to come down and clean them up so they wouldn't have a time out. Since they get put in time out at bedtime, they spend the following day in the jar.
It seems to work punishing his toys. He doesn't want to lose them, it's something he can see, and it is directly related to the offense. Giving him a time out is very temporary and he often thinks it a joke. But seeing a toy he can't play with is material, longer lasting enough that it makes an impression, and shows a clear path of action having consequences.
Now if only I can come up with a suitable creative solution to throwing food on the floor. Suggestions welcomed.