np.apply_along_axis accomplishes some of this, but it only allows a single core dimension on a single argument.
So I propose adding a new object, np.guvectorize(pyfunc, signature, otypes, ...), where pyfunc is defined over the core dimensions only of any inputs and signature is any valid gufunc signature (a string). Calling this object would apply the gufunc. This is inspired by the similar numba.guvectorize, which is currently the easiest way to write a gufunc in Python.