The attached patch add support of domains over arrays to PL/Python (eg: CREATE DOMAIN my_domain AS integer[]).
Basically it just uses get_base_element_type instead of get_element_type in plpy_typeio.c, and uses domain_check before returning a sequence as array in PLySequence_ToArray whenever appropriate.
There's one line I'm not sure about; I modified a switch statement (line 427):
switch (element_type ? element_type : getBaseType(arg->typoid))
The rationale is that when element_type is set, it is already a base type, because there is no support of arrays of domains in PostgreSQL, but this may not held true in the future.