Given that there's a set Α of all possible ActivityPub fields, a set Ω of fields that Aardwolf cares about, and a set Σ of standard-defined fields, we see Ω ⊂ Α, Σ ⊂ Α, and (crucially) Σ ⊂ Ω. Then a given message Μ has a set of fields σ ⊆ Σ (standard fields), a set of fields ω ⊂ Ω and ω ⊄ Σ (Aardwolf-handled extensions), and finally a subset α containing all the other fields - α ⊂ Α, but α ⊄ (Ω ∪ Σ).
So, we could implement a standards-only ActivityPub parser which, for the message Μ, creates a "Rusty" (typesafe) representation for σ (all fields in Σ), plus a hashmap which will contain stringly-typed versions of all other fields (ω ∪ α).
It seems to me that the most neighborly (and extensible) way to handle this is to write a json-ld Serde library (on top of the existing serde-json perhaps).
Then, atop that, we could create an Aardwolf library (and a Mastodon project could create a Mastodon library, a PeerTube project a PeerTube library, et cetera). Our Aardwolf library would use the already-extracted σ fields, but also extract from the hashmap ω (Aardwolf) fields, while leaving α (extension) fields intact but unhandled.
This would make it trivial to increase the size of Ω, while still gracefully handling Α fields.