On a SecurityDefinition message what would be the best way to convey the single market maker for a security?
There is the field 106/Issuer but the issuer will not always be the market maker (only in specific cases e.g. for structured products).
Would using the 1018/NoInstrumentParties repeating group be a good fit? 1051/InstrumentPartyRole could be 66=MarketMaker then.
Yes, that is a valid use case and the right choice for the market maker of an instrument. Similar to the generic Parties component being added to FIX 4.3 to replace explicit fields such as ExecBroker(76) with PartyRole(452)=1 (Executing firm), you can express multiple actors for an instrument, including the issuer (PartyRole(452)=125 added with EP254). The difference is that Issuer(106) was not removed as an explicit field.
The general policy was changed as of FIX 5, i.e. to stop physically removing fields and rather marking them as deprecated (visualized in orange color in FIXimate). In this case, there is not even a deprecation. The reason is that Issuer(106) is different from ExecBroker(76) and similar fields removed with FIX 4.3. It is part of the Instrument component and not part of the root level of the message. Issuer(106) can only relate to the instrument it is embedded in. The various party components are generic and relate to the message context (or component/group if nested).
Nowadays, we would probably only deprecate a field like ExecBroker(76) and explain in FIXimate what to use instead.
Issuer of a security not about who the market maker is. The Issuer(106) is to carry information about what entity issued the security. I.e. IBM is the issuer of the IBM stock. Issuer field has been heavily used for a while before the InstrumentParties was added and the Issuer as a party role was added significantly later (EP254) for the purpose of being able to provide the LEI of the issuer for regulatory requirements.