I know the title of this question is confusing but the weird behaviour is explained in the example below:
protocol Protocol {
func method() -> String
Basically yes, if there is a superclass that conforms to the protocol but doesn't provide an implementation for it, the protocol extension's implementation will be available in subclasses, even if the sublcasses have implementation (however they have to be casted to the superclass's or to the protocol's type).
However, if the superclass has an implementation of the protocol's method, then protocol's implementation won't be available from neither the superclass nor it's subclasses.