Please do (report back) 
I did make some assumptions before going to sleep last night though; for one that the potentiometer was connected as a simple voltage divider and fed to the analog input directly. And the other was that the inputs were useful at low values.. which I now think they are not, since the values change slowly at the beginning.
However it turns out it isn't as straight-forward as I first thought
For one, any log(x) for x between 0 and 1 will be a negative number.. which can be "solved" by adding a little offset, making sure the reading is never below 1 (aka a small-ish series resistor from the pot to GND). However, because of the slow changing values at the beginning, the potmeter's physical range would be limited to about the last 1/2 of its movement (probably dependent on the logarithmic function it has).
Well.. in my theoretical little tests, that is. Please note I havent tested this in practice yet!
Since I had some other test code handy, I made some small tests in processing:
Red line: logarithmic potentiometer
Blue line: "linearized" values
First without any offsets, as you can see the blue line goes below zero...

An offset of 1, to make the log() positive (equivalent of a series resistor of about 1/1023rd of the total resistance of the pot, I would think):

And a somewhat bigger offset (I used 10 here, = 10/1023rd total potmeter resistance), seems to make it somewhat more linear, and loosing some resolution. So you'd have to remap the Y axis range to useful values:

But it would seem, from the X axis, you will loose at least 1/2 of the physical range of the log pots. If they are really logarithmic that is and not the fake log type. I'm not sure how those would be.
Btw, here is my processing code, just in case.
// Testing logarithmic to linear conversion of potmeter values
// 2010.04.24 raron
int[] logarithmic = new int[1024]; // the "logarithmic" potmeter values
int[] linearized = new int[1024]; // attempted linearizing the exponential values
void setup()
{
size(400,400);
int xOrigo = 100;
int yOrigo = height-100;
int xsize = 256;
int ysize = 256;
// make coordinate system
line(xOrigo, yOrigo, xOrigo+xsize, yOrigo);
line(xOrigo, yOrigo, xOrigo, yOrigo-ysize);
// tick marks
for(int x=0; x<xsize; x+=10)
{
int tick = 10;
if(x%50 == 0) tick = 20;
line(xOrigo+x,yOrigo,xOrigo+x,yOrigo+tick);
}
for(int y=0; y<ysize; y+=10)
{
int tick = 10;
if(y%50 == 0) tick = 20;
line(xOrigo,yOrigo-y,xOrigo-tick,yOrigo-y);
}
// test
for (int i=0; i<1024; i++)
{
logarithmic[i] = [glow]1 +[/glow] (int) (1022.0 * pow(i/1023.0,10)); // added a small offset +1, to not get negative logarithm on the next line
linearized[i] = (int) (log((float)(logarithmic[i]))/log(10.0)*[glow]340[/glow]); // Important that the scale-up of 340 is inside the parentesis!
}
// Draw functions
for (int b=1; b<1024; b++)
{
// Draw logarithmic curve red
stroke(255,0,0);
line(xOrigo+b/4-1,yOrigo-(logarithmic[b-1]/4),xOrigo+b/4,yOrigo-(logarithmic[b]/4));
// Draw "linearized" curve blue
stroke(0,0,255);
line(xOrigo+b/4-1,yOrigo-(linearized[b-1]/4),xOrigo+b/4,yOrigo-(linearized[b]/4));
}
}
void draw()
{
}
Note that the scaleup-variable (I used a 340 directly here) needs to be inside the parenthesis, otherwise it wont work much at all.
Maybe time for someone actually knowledgeable in this to answer instead
Maybe the results could be better if combined with the method cr0sh linked to, for example?