Who gives SPV nodes merkle path to do validation for small subset of transaction?
The thin client requests the Merkle branch from any full node that has the complete block available. It is requested by specifying the inventory type MSG_MERKLEBLOCK, usually in response to learning that the bloomfilter served to the same full node had some positive results. The response includes the block header, the corresponding transactions and the hashing partners necessary to connect the transactions to the Merkle root.

You can find more details in the Bitcoin Developer Guide on MerkleBlock.