calling a blocking library in node.js vs erlang vm

In node.js, if my thread calls a blocking library, it can't accept any more requests until it gets back a response from the library. Is this the same situation with the Erlang virtual machine - i.e., can other processes keep accepting requests if one of the processes makes a call to a blocking library?

In Erlang, a process might block, but the Erlang scheduler will not block. Other processes will continue to be executed / given time by the scheduler. There are some calls like erlang:now that block all for a very short time, but there are non-blocking alternatives. If I recall correctly, Ericson is working hard to remove all blocking stuff from the Erlang VM. and most blocks are subtle edge-cases. For example: in R16, the last release, they fixed blocking hot-code upgrades.

See also ERLANG wait() and blocking

Yes, you can accepting requests with one process and make calls to blocking library with other. What do you want to achieve? If it's something like: "first client send data to server, and waits for answer, but server does not blocking and can accept request from others clients", you can do it something like this (example with gen_server behaviour):

handle_call(ClientRequest, From, State) ->
    %% make call to blocking library
    %% for the simplicity use spawn_link
    MyPid = self(),
    _Pid = spawn_link(fun() -> %% blocking data processing
                           ...
                           Result = ...
                           %% send reply back to server.
                           %% From -- using for answer to clients
                           gen_server:cast(MyPid, {reply, From, Result})
                       end)
    %% tell client wait for answer.
    {noreply, State}.

handle_cast({reply, To, Data}, State) ->
    %% send reply back to client
    gen_serve:reply(To, Data),
    {noreply, State}.