I have added the layout from the paper.
A Z error on Db will fire Xb and Xa. A Z error on Dc will fire Xa.
Thus these two are distinguishable.
If a X error occurs on Dc this will fire Zb. This can be corrected by applying X on Dc.
If a X error occurs on Db this will also fire Zb. It is also corrected by applying X on Dc. At the end Db and Dc have been ...
Distinguishing $X$ and $Z$ errors is easy. $X$ errors anti-commute with the $Z$-type stabilizers, and so when you perform a measurement of those parity checks, you get and answer '1'. Similarly, $Z$ errors give you a '1' answer only on the $X$-type parity checks.
Also, note that, in the bulk (i.e. not on the edges), you never get a '1' on only one weight-4 ...