It's definitely possible if address2 actually refer to OP_RETURN output.
It is
standard if the address2 is OP_RETURN output but it is still perfectly
valid for it to be anything else.
is it possible for CAmount in a transaction be zero?
Basically the only thing that the consensus rules care about is that the sum of outputs is not bigger than sump of inputs. In simple terms: you don't spend more than you can.