If I understand this right, both you and your clients are free to modify the schema of your respective databases, and you need to synchronise data between client and server. The changes will not be managed, scheduled, controlled or cross-notified.
Sorry to be a downer, but that facts are:
1. Chance of success? 1%
2. Risk of total system breakdown? 99%
3. Chance of your profitable client relationship turning into ruinous legal action? 25%
You will need to control the changes on both sides. Without change control, you are doomed to failure.
You can specify columns for each of the update / insert statements:
insert into serverAddress (urn, add1, add2, town)
select id,address1, area, city
where not exists (select top 1 1 from serverAddress where urn = clientTable.id)
set add1 = b.address1
from serverAddress a
inner join clientTable b
on a.urn = b.id
but you will struggle to programatically understand the significance of new, missing, modified columns. Column order should not be an issue unless you are running "select *" sort of nonsense.
If duplicates are being created, you need to revisit the workflow and start again! Are you both recording the same data? Will you both record different interpretations of the same data? Are identity columns used?
Sorry, but you're doomed.