Foreign keys can cause issues as dml can be delivered out of order, ie parent deleted before children. Make sure you have NOT FOR REPLICATION on fk constraints, we remove alltogether.
Also, 20k deletes is more batch processing, merge over a wan will have issues w/ such large dml requests. Better suited for transactional. So run your tests again and split up the dml. You will need to communicate this to your developers too, merge works well in oltp, bad in bulk load environments.
With that being said, merge is stable, reliable, you get perfect execution, and have nice gui & options for conflict resolution. The only negative is an addl rowguid column for each article.
Peer to peer is good if you need active/active, however is expensive requiring Ent Ed. Is basically bi-directional transactional replication, is fast & reliable and doesn't add addl schema. And I believe in 2012 a conflict viewer feature was added.