Does MERGE prevent deadlocks and server blocking?
In the example above you will see that I use WITH(HOLDLOCK) to prevent
  primary key violation and deadlocks.


That is necessary and (normally) sufficient to prevent PK violations with concurrent MERGE.  Deadlocks depend on the other locks in your transaction, but if you have a simple clustered index key lock for your MERGE you should be fine.


  I use @RecordID parameter to check if record exist and based on that
  MERGE will execute Insert or Update. This field is auto incremented id
  that I pass back and forth in order to make sure I always update
  correct rows in the table.


That is quite strange and probably bad.  You should use the Primary Key to "make sure you always update the correct rows".  I don't see why you have that column at all, let alone using it in your MERGE.  Just use the PK.