1. Slice the shallots and celery. Heat the oil in a large stockpot over medium-high heat. Add the shallots and celery. Cook until the shallots begin to soften but not brown, 5 to 7 minutes.
2. Add the butternut squash, vegetable broth, diced tomatoes, salt, and pepper. Bring to a boil, then reduce to a simmer.
3. Cover and cook until the butternut squash becomes tender and is easily mashed with the back of a metal spoon, about 45 minutes.
4. Puree the soup with an immersion blender, or in a standing blender or food processor in batches.
5. To make the topping, place the tofu, Parmesan, and salt in a mini-chopper or food processor. Whip until smooth and serve with the soup.