multiset | UNDEFINED ought to be a supported operation.

Consider

mapping(string:multiset(string)) attributes = ([]);
void add_attributes(string key, multiset(string) attrs)
{
  attributes[key] = attributes[key] || (<>); // Init.
  attributes[key] |= attrs;
}

Having UNDEFINED | multiset behave as (<>) | multiset would remove the need for the initialization.