We've had this discussion with Mendix about a year ago for a customer. Together, we concluded that there is no solution in Mendix 6. In Mendix 7, we were promised a solution: with the implementation of state in the client, the entire client-server-database interaction model would be revised and and option for optimistic locking would be implemented. Since I am no longer on the project, I haven't received updates about this.
I currently use the record locking mechanism from the Community Commons module, but like you I suspect this will not work in a multi-node environment (as I think the records locked is stored in server memory). It would be great of servers in an application group could share this info between them, but I'm not sure this would be easy to implement.
In the past I had developed my own record locking mechanism based on creating and managing records in a RecordLock database table. I switched to the CommunityCommons as we did not currently use multi-nodes and I was worried about the level of specializations used.
This worked OK, and would work in amulti-node environment as the locked records data is stored in the database, but every entity in the application was a specialization of the same RecordLock entity, so I was worried about performance impact.
I'm not sure if this helps much. The ideal solution would be for servers in a node group to know about each other and be able to share the record lock info in memory.
Edit: The lock record being created is quite small so should be quick to save to the DB:
My experience is that a database a locking mechanism is impossible to get perfect in a heavy used environment (I agree with Rom), Community commons lock is only for single node, maybe someone made an implementation with Redis?