If each Android device has access to the database of registration IDs, it can send GCM messages to other devices without using a server. You simply have to execute the same HTTP request to GCM that you would normally do from a server. That request would go directly to GCM server and from there would be delivered to your app on another device. To execute that request you need your app to know both the sender ID (for registering to GCM) and the API key (for sending messages) in addition to the recipient registration ID.
You can't use the gcm.send
method. That method sends messages to your server.