How it is possible to validate existing Pay to Public Key Hash transaction without public key? These are my understanding or assumptions.

Sign a document requires secret key and message only as below

SignDocument(secret key, message) =&gt; signature


And verification of signature requires public key, signature and message as below

VerifySignature(signature, message , public key)


Purpose of scriptPubKey is a script for validating signature for P2PKH transactions. 

It is clear that we need public key in order to validate transaction but existing transaction data doesn't have public key data but hash of public key only. 

I can easily understand Pay to Public Key transaction because public key is part of transaction data. 

If public key is not stored in blockchain so how it is possible to validate P2PKH transaction without public key?
A transaction which spends from a P2PKH output provides both the signature and public key in the input script. So the public key is part of the transaction data, just the spending transaction, not the output creating transaction.