Can you verify whether the affected blocks and underlying bad sectors on the disk are reallocated to "spare sectors" area? The bad sector should be reallocated when write operation fails. Verify it with smartctl:
smartctl -a /dev/sdb | grep -i reallocated
The last column should contain a number of total reallocated sectors. If there is zero try to read the bad sector:
hdparm –-read-sector XXXXXXXX /dev/sdb
It should return an I/O error otherwise I would recommend to skip next section.
The error means the sector was not reallocated yet. So you can try to reallocate it forcibly by writing it. Remember that any data stored in this sector will be lost after this step !!!:
hdparm –-write-sector XXXXXXXX --yes-i-know-what-i-am-doing /dev/sdb
By the way, the sector number XXXXXXXX should be possible to obtain from kernel messages (dmesg command or from /var/log/messages). As you had bad blocks during resynchronisation there should be some related messages similar to:
... end_request: I/O error, dev sdb, sector 1261071601
Then, try to verify it with smartctl again. Does the counter increased? If so try to read it with hdparm. Now, it should read it without any error as it is supposed to be reallocated. Done.
Finally, you can continue with mdadm and with adding the disk to your degraded mirror.