How to make sense of this projection? Let $f:\mathbb{R}^n\to\mathbb{R}^m$ be a smooth function with Jacobian $J_f(x)\in\mathbb{R}^{m\times n}$. Consider $x\in\mathbb{R}^n$ to be fixed and the following space
$$
\mathcal{T}_x = \left\{p\in\mathbb{R}^n\,:\,J_f(x) p = 0\right\}.
$$

Given $p\in\mathbb{R}^n$ I would like to project it onto $\mathcal{T}_x$ using the Jacobian $J_f(x)$.

The paper gives the following projection
$$
p_{\text{projected}} = \left[\mathrm{I} - J_f(x)^\top\left(J_f(x) J_f(x)^\top\right)^{-1} J_f(x)\right]p
$$
And they say that it is well-defined when $J_f J_f^\top$ is non-singular. This is repeated in several books and other papers. Surely though $p_{\text{projected}}$ is just zero?
Very important edit
Typically this is written slightly differently, so perhaps it's a misunderstanding in terms of notation. The often write
$$
J_f(x)^\top (J_f J_f^{\top})^{-1}(x) J_f(x)
$$
instead of
$$
J_f(x)^\top (J_f(x)J_f(x)^\top)^{-1} J_f(x)
$$
Perhaps this is where the difference comes from.
 A: The fact that it is a function of $x$ has no relevance to the question. Fix $x$ so that $J_f(x)\,J_f(x)^\top$ is non-singular. That operator projects $p$ into the kernel of $J_f(x).$ More explicitly, it projects away the row-space of $J_f(x).$ We will verify this explicitly. First, it is easy to see that image is the kernel of $J_f(x).$
Suppose $y \in \mathbb{R}^n$ was such that
$$y = \left[ I_{n\times n} - J_f(x)^\top\left(J_f(x) J_f(x)^\top\right)^{-1} J_f(x)\right]p.$$
Left multiply by $J_f(x)$ to find,
$$J_f(x)\,y = J_f(x) \left[ I_{n\times n} - J_f(x)^\top\left(J_f(x) J_f(x)^\top\right)^{-1} J_f(x)\right]p
=\left[ J_f(x)  - J_f(x) J_f(x)^\top\left(J_f(x) J_f(x)^\top\right)^{-1} J_f(x)\right]p.
$$
Simplify,
$$J_f(x)\,y
=\left[ J_f(x)  -  J_f(x)\right]p
=
0.
$$
Therefore $y \in \mathrm{ker}(J_f(x)).$ Now, your question is, can $y\neq 0$? Sure!
Suppose $J_f(x)$ has a non-trivial kernel, i.e. that there exists a $y \neq 0$ so that $J_f(x)\,y = 0.$ Now pick any other vector $0 \neq v \in \mathrm{im}(J_f(x)^\top)$ and define
$$p = y + v.$$
I claim that $p_\text{proj}(p) = y.$ Let us verify this. Explicitly we want to compute,
$$p_\text{proj}(p) = \left[ I_{n\times n} - J_f(x)^\top\left(J_f(x) J_f(x)^\top\right)^{-1} J_f(x)\right] p.$$
Substituting our expression for $p$ we get,
$$p_\text{proj}(p) = y + v - J_f(x)^\top\left(J_f(x) J_f(x)^\top\right)^{-1} J_f(x)\, y - J_f(x)^\top\left(J_f(x) J_f(x)^\top\right)^{-1} J_f(x)\, v.$$
Since $y \in \mathrm{ker}(J_f(x)),$
$$p_\text{proj}(p) = y + v - J_f(x)^\top\left(J_f(x) J_f(x)^\top\right)^{-1} J_f(x)\, v.$$
Now, since $v \in \mathrm{im}(J_f(x)^\top),$ there exists a $q \in \mathbb{R}^m$ so that $v = J_f(x)^\top\,q.$ Therefore,
$$p_\text{proj}(p) = y + v - J_f(x)^\top\left(J_f(x) J_f(x)^\top\right)^{-1} J_f(x) J_f(x)^\top\,q.$$
Then simplify,
$$p_\text{proj}(p) = y + v - J_f(x)^\top \,q.$$
Finally use the fact that $v = J_f(x)^\top \,q,$ to arrive at
$$p_\text{proj}(p) = y.$$
