If you extend a type to implement a protocol, and then create an instance of that type that carries its own implementation of the same protocol in its metadata, ClojureScript will still use the implementation from the type, whereas Clojure uses the more specific metadata implementation.
Here's a brief example based on one of the tests for ClojureScript's protocol metadata implementation.
Edit: I am unable to make the code sample presentable in this editor, please see this gist instead: https://gist.github.com/cjohansen/a24257ecb5db15c7e20aaa25ff713b30
(defprotocol ExtMetaProtocol
:extend-via-metadata true
(ext-meta-protocol [x]))
(ext-meta-protocol (with-meta {} {`ext-meta-protocol (fn [_] 1)})) ;;=> 1
(extend-type clojure.lang.PersistentArrayMap
ExtMetaProtocol
(ext-meta-protocol [m]
2))
(ext-meta-protocol {}) ;;=> 2
(ext-meta-protocol (with-meta {} {`ext-meta-protocol (fn [_] 1)})) ;;=> cljs => 2, clj => 1