The C64 expansion port can and does support multiple IO devices without conflicts. There is 0.5 KiB that is decoded for $DE00-$DFFF, using /IO1 and /IO2 on the expansion port. As long as the devices do not step on conflicting addresses, a multi-card expansion extender can be used to allow connection of multiple cards which could be active simultaneously. You just need to not exceed the ports power budget.
Firmware for such cards isn't as straightforward. The expansion port ROM is mapped to $8000-$BFFF, and there is no inbuilt way to arbitrate multiple IO expansion cards wanting to share that ROM space for firmware.
It's sort of like the Apple ][ bus where there's 256 bytes of potential firmware space for each IO expansion card, but without the sophisticated means to arbitrate access to additional firmware space.
Still, it seems that the 256 bytes of space for IO1 and IO2 on the C64 expansion "bus" could be used to bootstrap loading a device driver into the main system RAM. As far as I know, the C64 has nothing to prevent it from running code in the dedicated IO space $D000-$DFFF (when IO is banked in). So initializing an IO card could be done with a simple BASIC command like "SYS 56832".
Question: Is there either a "de facto" or "recommended" way of providing firmware on a C64 IO card so that it can be used alongside other IO cards? Are there any examples of cards that do this?