I'm dealing with a lot of block chain downloads and as such I've been thinking about how to speed it up. It seems that the official client validates all transactions, even ones that are deep in the block chain.
The hash of any given block guarantees the integrity of every previous block and the merkle tree guarantees the integrity of all transactions in those blocks. So couldn't we skip validation (other than the hashes/merkle) for everything up to the last checkpoint?
In the C++ the slow part is the indexing and data structure maintenance rather than the block integrity checks. If you want to run a full node you can't avoid it.
For a lightweight/client-mode/SPV implementation yes you can skip earlier blocks if you have an empty wallet and I plan to implement that optimization at some point in BitCoinJ.