One of the things you can do, for example, is triangulate ping and query response rates. If I ping nodes in my immediate network I can record the ping times of my group of connected nodes. If I ping and query, the query times should have some level of correlation, unless you are running a fake node. A fake node has to send a request to another node (hey, AnotherNode :-)) in order to get data to respond to the queries it is being asked for. Do this enough times and you will be able to figure out who are the fake nodes, but even if they are not fake you can score them down.
If you add random ping and qurry rules into the equation, then you can avoid someone trying to game the ping and queries by running 5:2 bitcoin full nodes to fake nodes.
You could even throw a random transaction verification into the mix.