Olá Vitor,
Você entendeu muito bem e fez um desenho bem massa.
Eu só faria uma ressalva pra análise da verificação Nº3. Eu acho que vc entendeu certo, mas a forma de se expressar poderia melhorar.
Quando você atribui um valor a uma referência, se o compilador permitiu essa ação, quer dizer que já foi feita a verificação de compatibilidade de tipos. Ou seja, a referência pode apontar pra null ou pra uma instância concreta de um objeto de tipo compatível. Então a implementação do método sempre vai existir, não importa em qual nível da cadeia de herança que a implementação esteja. Considerando isso, não vai ter o cenário onde não existe o método no objeto.
Sobre o "Se não: usar o método da referência". Essa afirmação não pode ser verdadeira, pois a execução do método fica a cargo do objeto. A referência por si só não "tem" a implementação do método. Ela nos garante que vai apontar pra um objeto que tenha a tal imaplementação. Assim, quando chamamos um método a partir dela, ela chega no objeto e fala: "Oh objeto que eu to apontando, execute método X pra mim, por favor" e a instância que vai fazer o serviço.
Há que se considerar também, que em muitos casos a referência será de uma interface ou de classe abstrata qualquer, que não terá a implementação de todos os métodos.
Bom, é isso, se ficou alguma dúvida ou ponto pra debater sobre minha argumentação, pode ficar a vontade pra colocar aqui, beleza?
Abs