If you want an identity scale (which allows you to pass the number for r directly in pixels), you can do
Plot.dot(sales, {x: d=>d.units, y: "fruit", r: d => d.units}).plot({r: {type:"identity"}})
Another possibility is to set a proportional scale with:
Plot.dot(sales, {x: d=>d.units, y: "fruit", r: d => d.units}).plot({r: {type:"linear", domain: [0, 40], range: [0, 40]}})
Both result in the same chart, but the meaning is different: in the first case, you pass pixels and they are taken “as is”. This precludes, for example, having a legend: the plot has no notion of what data is passed through. In the second case, you have a scale that maps a value of 10 units to a value of 10 pixels.