A Swift function signature includes its names, input parameters and its return type. So, if you wrote this:
let f = E().arbitraryFactory()
what would f's type be? The compiler would complain that f's type is ambiguous; it's not clear which of the two functions should be called, whether a B or an E should be returned. You'd need to make it explicit:
let f : B = E().arbitraryFactory()
The reason one requires an override and the other does not: returning an E doesn't conform to the 'super' function signature, but returning a B does, because a B is an A. What matters with the inherited function is that, when called, an A is returned; the overridden signature is allowed to be more specific about its return type.
With the identity function the same can't be said; the 'overridden' signature type isn't general enough with its input arguments - E().identify(A()) would call D's function, not E's, because E's isn't general enough.