Well in any software, if the spec says a property is mandatory, implementers work on that assumption - that attribute can’t be void/null. If you later make it optional, any software that followed the previous version of the spec will either keep working (if it creates default values, empty strings etc) or it will break.
An empty string is not an ‘optional’ attribute, formally. An ‘optional’ attribute is one that can be null at runtime. An empty string is just a particular value of the String type.
NB: I’m not saying that moving to optional description
will break tools badly; they would probably be fairly easy to update. But there are always unexpected knock-on effects with these kinds of changes. We just need to be careful.
I would suggest a careful examination of the requirements, and decide whether you really want description
and maybe other fields to be optional, or if you want them to be mandatory, but defaulted to specific values e.g. empty string etc, in specific circumstances.