Hi Stephen,
No, it is not possible to have a deterministic node be data.
In most cases I have seen where people want to do this (but there are exceptions), a rearrangement of thinking results in seeing the actual observed datum as stochastic. For example, if y[i] follows a distribution, then the function f(theta, y[i]) follows a distribution that can be derived from y[i]'s distribution. If you can write that out, then you can code it in a nimbleFunction and use that as a user-defined distribution for x[i]. Of course, that assumes y[i] is unobserved.
If you really need to work around the system more, another trick is to provide a dummy data value that you declare to be a stochastic node with a user-defined distribution, and then calculate whatever log probability you want to contribute to the model.
Example:
dtricky <- nimbleFunction(...) # see user manual on writing a user-defined distribution
Model code:
dummy[i] ~ dtricky(x[i], theta, y[i])
This results in calls to dtricky as:
<contribution to log probability or likelihood> = dtricky(dummy[i], x[i], theta, y[i])
So dummy[i] can serve simply to place a log probability calculation in the DAG that will be seen as depending on x[i], theta, and y[i].
HTH
Perry