negative fee, "0.5 BTC -> 1.5 BTC": Sell something for 1 BTC.
zero fee, "0.5 BTC -> 0.5 BTC": Move coins for free, so "you pay my fees" transaction.
positive fee, "0.5 BTC -> 0 BTC (OP_RETURN?)": Donation to anyone (probably miner, unless combined with something else).
Also, SIGHASH_SINGLE bug could be used in the last case, just to reduce transaction size and skip one output. Or maybe SIGHASH_NONE, it would be even better (unless there is some amount left, then SIGHASH_SINGLE would do the trick).