Every output state commits to the unique notary cluster that is authoritative for whether that output has been spent or not. You can simply ask the notary if the output is still current or attempt to use it in a transaction. If it has been spent, the notary will not sign your transaction.
The underlying architecture of Corda allow all these options. Corda is unique in that multiple notary clusters can operate on the same network. So one could imagine some notary clusters being operated by regulators, some by a federation of users, some by single trusted parties and so on.
The way you move a state from one notary to another is through a special type of transaction. The output state must be identical to the input - with only the identity of the notary changed. This transaction must be signed, like all transactions, by the notary that controls the input state. See "changing notaries" on this page: https://docs.corda.net/consensus.html