The arguments in the article make sense, with one exception, which I'll try to illustrate with an example:
Say that a Person has a Set of Claims, and that a Claim's natural id is type+date. Say that I SELECT a Person with his/her Claims, and that one of the Claims has the natural id: typeA+today. Say that I try to add in Java another Claim with the same natural id: if the #equals() is based on the surrogate, not the natural id, I will be able to, but I shouldn't: I used a Set precisely because I want to prevent two Claims with the same natural id before accessing the relational table.
Note that in this case the relational table would have the same natural id with a unique constraint on it, so object and relational models would be consistent.