The bird example works fine when a fixed is-a hierarchy is in question. However, our writing the inheritance cancellation axioms depended on knowing exactly from what higher level the properties were inherited. This doesn't correspond to my intuition of how we humans represent inheritance. It would seem rather that when we say that birds can fly, we don't necessarily have in mind that an inheritance of inability to fly from things in general is being cancelled. We can formulate inheritance of properties in a more general way provided we reify the properties. Presumably there are many ways of doing this, but here's one that seems to work.
The first order variables of our theory range over classes of objects (denoted by c with numerical suffixes), properties (denoted by p) and objects (denoted by x). We don't identify our classes with sets (or with the classes of Gödel-Bernays set theory). In particular, we don't assume extensionality. We have several predicates:
ordinarily(c,p) means that objects of class c ordinarily have property p. means that class c1 ordinarily inherits from class c2. We assume that this relation is transitive. in(x,c) means that the object x is in class c. ap(p,x) means that property p applies to object x. Our axioms are
Axiom (29) is the afore-mentioned transitivity of . (30) says that properties that ordinarily hold for a class are inherited unless something is abnormal. (31) cancels the inheritance if there is an intermediate class for which the property ordinarily doesn't hold. (32) says that properties which ordinarily hold actually hold for elements of the class unless something is abnormal. (33) cancels the effect of (32) when there is an intermediate class for which the negation of the property ordinarily holds. Notice that this reification of properties seems to require imitation boolean operators. Such operators are discussed in (McCarthy 1979).