Nodes are trying to connect to other random nodes, they don't choose only their neibours, right?
With the amount of hashing on the network, those 20 nodes, even if mining, would not mine enough blocks to reach 6 confirmations anytime soon. If those 20 were disconnected entirely you'ld simply find that no new blocks are arriving. If you require confirmations to be the recommended six blocks, the transactions will never confirm and thus you aren't at risk.
The client can be configured to explicitly connect to certain nodes, so in your example if one of those 20 maintains at least one connection to the outside, all 20 will get the correct block chain.
If you wish to accept on 0/unconfirmed transactions you'ld want to also use a monitoring system that listens for double spend attempts (something that is not yet commercially available though). That would require a continuous connection to the monitoring service though.
Here's a post with additional discussion on the topic: