How to break out of error loop in transactional replication?
The error is caused by the code in the custom delete stored procedure for each article: 

create procedure [dbo].[sp_MSdel_dboChild]
        @pkc1 int
as
begin  
    delete [dbo].[Child]
where [ChildID] = @pkc1
if @@rowcount = 0
    if @@microsoftversion&gt;0x07320000
        exec sp_MSreplraiserror 20598
end  


If no row is deleted, a special procedure is called and the transaction is rolled back. 

In order to avoid this, I've created a post-Snapshot script that alters the all delete / update replication stored procedures and logs the error to a table instead.

CREATE procedure [dbo].[sp_MSdel_dboChild]
        @pkc1 int
as
begin  
    delete [dbo].[Child]
where [ChildID] = @pkc1 
if @@rowcount = 0
    if @@microsoftversion&gt;0x07320000
        insert into repl_errors (database_name, table_name, pkey_col, pkey_val) 
        select dbo.fn_GetDB(APP_NAME()), 'Child', 'ChildID', @pkc1
end