After a lot of struggle, I found out that Electrum uses following root derivation for normal and multisig wallets. For example:
root/0/0
for each cosigner. Example:m/44'/0'/0'
==> shared root key (x)x/0/0
==> address for first receiving multisig (derive in all cosigners shared keys. all 3 keys must be lexicographically ordered).
some semi-compatible form of BIP45 for hardware wallets. Didn't test it but here's the code: https://github.com/spesmilo/electrum/blob/master/lib/base_wizard.py#L220
refs:
What BIP32 derivation path does Electrum use?