Everyone gets this wrong, imo.
CheckTransaction rejects nValue < 0, and that is the entire rule, so zero slipped through by omission rather than by permission.
Where Satoshi WAS explicit about zero he wrote <= 0, twice, and both times he put it in the Bitcoin full node wallet software, in the send dialog and in SelectCoins, and he banned the empty transaction outright on top of that.
So, the zero rule does exist in his code. It just lives in the wallet instead of in consensus.
Craig isn't against zero outputs either. Put a fee on it and he says plainly that he doesn't mind, and what he asks for is a non-zero output OR a non-zero fee, so his only target is the transaction where no satoshi moves anywhere, which he refuses to call a transaction at all.
So the fight was never about zero, it's about which layer enforces the rule, and on the substance, that a transaction should move value, so, I think both men (Satoshi and Craig [the same guy?]) land in the same place if you actually look at the rule and how and where it's implemented.