Your problem is that you have an empty data column and you have not tried to check or process it in your concatenation.
, , . REPLACE , .
(DT_STR,50,1252)REPLACE(([Column 1] + "|" + [Column 2] + "|" + [Column 3] + "|" + [Column 4]),"||","|")
, , . ,
(DT_STR,50,1252)(([Column 1] + ((LEN([Column 1]) == 0) ? "" : "|") + [Column 2] + ((LEN([Column 2]) == 0) ? "" : "|") + [Column 3] + ((LEN([Column 3]) == 0) ? "" : "|") + [Column 4]))
SELECT
'A' AS [Column 1]
, 'B' AS [Column 2]
, '' AS [Column 3]
, 'D' AS [Column 4]
UNION ALL
SELECT
'A' AS [Column 1]
, '' AS [Column 2]
, '' AS [Column 3]
, 'D' AS [Column 4]
UNION ALL
SELECT
'A' AS [Column 1]
, '' AS [Column 2]
, '' AS [Column 3]
, '' AS [Column 4]
UNION ALL
SELECT
'' AS [Column 1]
, '' AS [Column 2]
, '' AS [Column 3]
, 'D' AS [Column 4];

, , Script Component . , , . , NULL.