CHECK constraint to limit certain rows
The problem however is, that it doesn't allow updating such row. The updated row seems to be considered a doublet.


That's one of the problems.


  Is there a way to fix this or is it a conceptual problem CHECK constraints just don't cover?


Yes, use "on insert" and "on update" triggers,
and yes "check" constraints are unsuited.

you'll also need an "on update" trigger on "attribute" so that changes
of singular are verified against the existing data.

A different approach would be to have partial unique indices generated by a trigger that tracks inserts, deletes, and updates on attribute.

Eg. if you have a attribute day_of_birth which is singular you would do 

CREATE UNIQUE INDEX "object_day_of_birth_unique" ON objects(object) WHERE attribute='day_of_birth';

This leverages something that the database engine is good at, and so will give a slight performance boost, but as you're using EAV I suspect perfromance is not important.

when writing such a trigger be sure to use quote_literal and quote_ident where apropriate in execute expressions.