El procedimiento almacenado no solo devolverá el resultado del último SELECT. En realidad, debe devolver el valor:
CREATE OR REPLACE FUNCTION fun() RETURNS text AS $$
BEGIN
--- ....
RETURN(SELECT dblink_disconnect());
END
$$ LANGUAGE plpgsql;
Está recibiendo el error porque Postgres espera que la función devuelva algo del tipo texto, pero su función no devuelve nada.