I'm far from the best technical guy around here, but recently I was thinking about scaling of Monero. Better think about it early than ignoring the problem (assuming there is one).
It's seems the anonymity of XMR has a trade-off: full pruning isn't possible. Bitcoin nodes can have full pruned nodes with a node only keeping the last x blocks.
XMR doesn't have" UTXO's", only "TXO's", therefore images keys are used to check for double spends. When sending a transaction, you need also a chunk of TXO's to be able to construct your ring signature. Using the same chunk for a long period of time reduces the anonymity.
Therefore, I think we have these options for different types of nodes:
Watch-Only node:
A Watch-Only node could be used to monitor your incoming transactions for your cold storage wallet.
To be able to verify incoming transactions, you need to scan the blockchain once from the point where you received your first transaction. After that you only need to check every new block to see if there is an incoming transaction. Key images aren't necessary because invalid transactions (double spend) won't be included in a block.
You don't need to store the blockchain, although it's advisable that your node keeps your TXO's (or blocks) associated with your transactions so you can easily start sending transactions if necessary
Send-Only node:
Asuming a wallet knows his balance (and thus the TXO's he owns) either by scanning the blockchain once or because the watch-only node stored the specific data needed to calculate the balance, a "Send-Only" node needs a subset of TCO's to be able to build a ring signature. The node can either download some TXO's "on the fly" from the network (but isn't this dangerous for privacy? not sure) or periodically download a (small) subset of TXO's and "refresh" this subset for example on a weekly basis (the smaller the timeframe, the better the anonymity, I assume).
Also, one need to be able to check if the TXO's he downloaded form the network are valid. If someone somehow tricked you in downloading a fake subset of transactions, and you try to broadcast a ring signature with those fake TXO's, you will expose your real TXO's! So one need to double (or triple, or quadruple?) check the network. Maybe the checkpointing can be a part of this. if the checkpoints are relatively close to each other (for example one checkpoint every week) one can just download some subsets of TXO's from a few weeks and build his ring sig with those subsets. Don't use only one subset, because it will be obvious that all TXO's in the ring sig you use are from the same week, and only the one's you own are from another period. The TXO subsets should ideally be unrelated on the dates referring to the TXO's you own.
Use case for this strange type of node: faucets, lotteries, hot wallets for exchanges
Light Weight Node:
Basically the watch-only node and send-only node in one node.
When you create your account, the node need to start checking all new blocks from that point in time. When there're no incoming transactions in a certain block, this block can be deleted. When a block contains an incoming transaction, the TXO (or the full block) is stored. The node also stored some blocks unrelated with the TXO's you own to be able to construct ring sigs. The node need to periodically refresh the anonymity set (subset of TXO's)
Mining node:
A miner needs the last x blocks of the blockchain and all image keys to be able to verify blocks and build on the most recent version of the blockchain.
Maybe our checkpointing system could determine from where a miner needs to keep it's blockchain?
This is a "full miner" that constructs his own blocks, not a miner that gets it's work from a mining pool.
(so in essence, this means that solo miners and pool operators need to have a "mining node")
Blockchain sharing node
This node doesn't store the full blockchain, but only parts of it. The operator can choose the % of the blcockhain he wants to store.
This type of node will often be combined with the mining node, but this isn't necessary.
Why should a node only store a part of the blockchain?
Imagine a future where the blockchain is several hundreds of TB large. If there are scaling problems for the storage and/or bandwidth (not sure this will happen, but one never knows) then it will be costly to store a full blockchain. We maybe won't see free blockhain explorers (or at least, the explorers would have a lot of advertisements, delays etc). If one wants to create a ring signature and needs a certain part of the blockchain that is related to his TXO's, this node (the "send-only node" or the component of it in the "light weight node") pings the network and downloads the blocks/TXO's he need. For this service, the node pays a small fee (in XMR) based on a "payment channel" technology (check [http://www.joystream.co]). Both seeder and downloader can set the rates they want to pay in their client. Refreshing your anonymity set a lot is costly, but better for anonymity. tripplechecking if the data your downloaded if valid is more costly than only doublechecking, but again, better for your anonymity. It's a trade-off.
Full Archival Node:
Basically how the nodes work now: all blocks, all images keys, all TXO's are downloaded, stored and shared (at the moment still for free).
This node contains the mining node and the network node with setting for storing the blockchain at 100%.
That's about it
And please, correct me if I'm wrong :) I didn't really dive deep in the code. So there are mistakes in this post, I'm sure :)