RE: Moves Pokémon should have but don't.
What determines what moves Pokemon know is not done in the name of coverage. It is done in the name of logic.
A Charizard would not be able to learn Surf because, although he can carry trainers on his back just fine, he would not be able to swim because, as we know, he would kill himself since his fire would be extinguished. However, Nidoking and Rhydon are both capable of learning Surf because, despite being weak to Water-type attacks in battle, they are both strong burly creatures that are easily capable of supporting a person's weight on their back. (Would you trust a non-hostile Nidoking or Rhydon to swim you to safety? I sure as heck would.)
This doesn't fully explain why stuff like Spearow (and not Scyther) are able to learn Fly, but it's a start. There are obviously holes in this logical dragnet, but they are not large enough to create things that would not ever make sense - a Spearow might be able to support a person's weight if it was a really big strong Spearow, maybe. It just doesn't allow things that would never make sense on any level, no matter how hard you try. For example, Ingrain: it is only really usable by organisms that are or are similar to plants (such as Roserade, who is one, Cradily, who also is one, and Amoonguss, which is similar to one). You would not expect, say, a Swampert to start growing and planting roots, right? We shouldn't be expecting a Charizard to start swimming either.
Long story short: What moves that Pokemon are capable of using has nothing to do with coverage. Nothing. Nothing.