I can definitely understand the points both you and kano made and agree with you that the addition of empty blocks to the chain is a necessary evil in the current state of things.
The issue wasn't whether it's okay to generate empty blocks or not. The issue is a pool creating empty blocks when there are transactions pending due to a pool's poor optimisation choices. P2pool by itself does not do anything to limit transactions as an optimisation, it just uses whatever it is given by the bitcoin daemon. That points the finger at the custom antpool implementation as being responsible.