Wallets that support 40 byte message attachment via OP_RETURN? Desktop / Mobile?
So is it one OP_RETURN parameter for each bitcoin transaction or per
  each input/output address?


One OP_RETURN output per transaction regardless of the number of inputs and outputs is standard for 0.9.x bitcoin core clients.


  If its each transaction, so its safe to say its about .0001 btc to
  send 40 byte message?


Yes, but you should not do it without significant reasons.


  Aside from OP_RETURN message attachment, what other methods are there
  to attach custom data?


There are different methods. You can use fake public keys in bare multisig outputs. Or encode some data with values or addresses of other outputs.