It's not ideal at the moment, but you can do something like
\partial{#}::PartialDerivative;
r::Symbol;
r::Depends(\partial{#});
ex:=\partial_{i}{x^j f(r)};
This makes product_rule
work as required,
product_rule(_);
gives $\partial_{i}{x^{j}} f(r) + x^{j} \partial_{i}{ f(r)}$. You then have to help it a bit with
the chain rule, e.g.
chainrule:= \partial_{i}{A?(r)} = \partial_{r}{A?(r)} \partial_{i}{r};
substitute(ex, chainrule );
will apply the chain rule on any function of r
and in your case gives
$\partial_{i}{x^j}f(r) + x^j \partial_{r}{f(r)} \partial_{i}{r}$.
Facilities for these kind of computations are relatively new and there's plenty of space
for improvement; I hope to get back to this in fall when I'll have some more manpower to work on Cadabra.