Inserting new abstract type into existing hierarchy?

Ahh I skim read the “existing package” part

You can’t redefine an existing type in another package, it’s not a thing. You need to use holy traits instead. You can even do that with existing abstract types, which could be something like:

category(::Animal) = Animal
category(::Dog) = Mammal

somemethod(animal::Animal) = somemethod(category(animal), animal)
somemethod(::Type{<:Mammal}, animal) = ...
somemethod(::Type{<:Animal}, animal) = ... # fallback