Events can have required fields (in dtd) and optional fields (not in dtd). Optional fields can be empty and the current default value for such empty fields seems to be null with the convention that those optional fields if they have value null are not written out (see Kai's answer to pull request 811)
However according to Michał this conflicts with contrib protobuf which defaults to the empty String and does not allow to use null. So we either have to map "" <=> null or decide on another default value.
PersonMoneyEvent and PersonStuckEvent are examples for events with optional String fields.